/*
 * EJERCICIO:
 * - Crea ejemplos de funciones básicas que representen las diferentes
 *   posibilidades del lenguaje:
 *   Sin parámetros ni retorno, con uno o varios parámetros, con retorno...
 * - Comprueba si puedes crear funciones dentro de funciones.
 * - Utiliza algún ejemplo de funciones ya creadas en el lenguaje.
 * - Pon a prueba el concepto de variable LOCAL y GLOBAL.
 * - Debes hacer print por consola del resultado de todos los ejemplos.
 *   (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades)
 *
 * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos.
 * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda.
 */


// Sin parámetros ni retorno, con uno o varios parámetros, con retorno...

void sinParaFunction() {
  print('Hola');
}

String fullName(String name, String surname) {
  return name + ' ' + surname;
}

void suma(int a, int b) {
  print(a + b);
}


// Comprueba si puedes crear funciones dentro de funciones.

void resultado() {

  int resta(int a, int b) {
    return a - b;
  }

  print(resta(2, 4));
}

/*

 DIFICULTAD EXTRA (opcional):

  * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número.
  * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que:
  *   - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro.
  *   - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro.
  *   - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas.
  *   - La función retorna el número de veces que se ha impreso el número en lugar de los textos.
  *
  * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos.
  * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda.
 
 */

int numeros(String fizz, String buzz) {
  int result = 0;

  for(int i = 0; i <= 100; i++) {

    if ( i % 3 == 0 && i % 5 == 0) {
      print(fizz + buzz);

    } else if ( i % 3 == 0) {

      print(fizz);
    } else if ( i % 5 == 0) {
      print(buzz);
    } else {
      result += 1;
    }
  }
  return result;
}
/* -------------------------------------------------------- */

void main() {

  var listado = ['Botella de agua', 'Mochila', 'Saco de dormir'];
  
  sinParaFunction();

  print(fullName("Marcos", "Barrientos"));

  suma(4, 6);

  resultado();

  // Utiliza algún ejemplo de funciones ya creadas en el lenguaje.

  listado.forEach((element) {
    print(element); 
  });

  // Dificultad Extra
  print(numeros('fizz', 'buzz'));
}